package com.designpattern.proxy;

/**
 * 代理模式
 */
public class Main {

    /**
     * 为目标对象提供代码，以控制对目标对象的访问。
     * 场景1：当我们在访问目标对象时，访问的不是真正的目标，而是他的代理对象
     * 场景2：虚拟代理
     * 场景3：对原有功能的增强，比如数据库链接池，在获取 Statement，Connection 都不是使用目标对象，而是使用他们的代理。在 create,close 等操作时 都有自己独有的方法
     * <p>
     * 例子：饭馆老板做完餐后需要把 餐送给顾客。老板是不会自己去送的，而是会委托外买小哥送餐。
     * 而外卖小哥就是老板的代理
     *
     * @param args
     */
    public static void main(String[] args) {

        // 老板整理顾客的信息,食物
        Order order = new Order();
        order.setName("zxs");
        order.setAddress("西大街 107号");
        order.setPhoneNo("18578903487");
        order.setFood("蛋炒饭");

        // 交给外卖员
        WaiMaiXiaoGeProxy proxy = new WaiMaiXiaoGeProxy(order);

        // 外卖员送餐
        proxy.findFangZi();
    }
}
